Otevreni okna v MDi aplikaci po startu

Otázka od: Jan Kirchner

3. 10. 2004 8:42

Ahoj,

potrebuji poradit s problemem na ktery jsem nenasel v literature napovedu.

Mam MDI aplikaci a potrebuji aby se po startu aplikace a otevreni hlavniho
(rodicovskeho) formulare v nekterem pripade automaticky
otevrelo dalsi - pracovni formular (s posledne editovanym souborem).

To neni problem udelat jako reakci na nejakou udalost (vyber z menu, stisk
tlacitka, pohyb mysi...) ale jak okno otevrit po startu
aplikace. Behem inicializace promennych aplikace v procedure FormCreate
hlavniho formulare nemuzu pracovni formular otevrit, protoze
v teto dobe jeste neni otevreno ani hlavni formular.

Idealni by bylo umistit rutinu otevreni pracovniho formulare do takove udalosti
hlavniho formulare, ktera se vola pouze jednou po
zobrazeni hlavniho formulare. Jenze jaka je to udalost? V dobe OnCreate jeste
formular neexistuje, udalosti OnShow, OnActivate... se
zase muzou vyskytnout nekolikrat, coz neni zadouci.
V literature se bezne ukazuji priklady splash screen coz neni tento priklad.

Je spravne umistit rutinu otevirajici okno do hlavniho kodu programu pred
"Application.Run;" ?

Dekuji za napovedu.


Honza


Odpovedá: jsdelphi@creatix.cz

3. 10. 2004 11:56

>Mam MDI aplikaci a potrebuji aby se po startu aplikace a otevreni hlavniho
(rodicovskeho) formulare v nekterem pripade automaticky otevrelo dalsi -
pracovni formular (s posledne editovanym souborem).

>To neni problem udelat jako reakci na nejakou udalost (vyber z menu, stisk
tlacitka, pohyb mysi...) ale jak okno otevrit po startu aplikace. Behem
inicializace promennych aplikace v procedure FormCreate hlavniho >formulare
nemuzu pracovni formular otevrit, protoze v teto dobe jeste neni otevreno
ani hlavni formular.

>Idealni by bylo umistit rutinu otevreni pracovniho formulare do takove
udalosti hlavniho formulare, ktera se vola pouze jednou po zobrazeni
hlavniho formulare. Jenze jaka je to udalost? V dobe OnCreate jeste formular
>neexistuje, udalosti OnShow, OnActivate... se zase muzou vyskytnout
nekolikrat, coz neni zadouci. V literature se bezne ukazuji priklady splash
screen coz neni tento priklad.

Ja to resim tak, ze pri udalosti hlavniho formulare FormShow si posilam
vlastni zpravu CM_CXSALES_FORMSTART.

unit xxx;

interface

const
  CM_CXSALES_FORMSTART = WM_USER + 1;

type
  TCxSalesMainForm = class(TForm)
  ...
  private
    procedure CMFormStart(var Message: TMessage); message
CM_CXSALES_FORMSTART;
  ...
  end;

implementation

....

procedure TCxSalesMainForm.FormShow(Sender: TObject);
begin
  inherited;
  ...
  PostMessage(self.Handle, CM_CXSALES_FORMSTART, 0, 0);
end;

....

procedure TCxSalesMainForm.CMFormStart(var Message: TMessage);
begin
  ... otevreni toho tveho formulare
end;

Jan Skopovy